const {ccclass, property} = cc._decorator;

@ccclass
export default class Door_Village extends cc.Component {

    @property({displayName: "场景名称", tooltip: "场景名称"})
    scene_name: string = "";

    @property({displayName: "加载进度条父节点", tooltip: "加载进度条父节点", type: cc.Node})
    load_parent: cc.Node = null;

    @property({displayName: "进度条几秒加载完", tooltip: "进度条几秒加载完", type: cc.Float})
    load_time: number = 3;

    @property({displayName: "显示进度的文字", tooltip: "显示进度的文字", type: cc.Label})
    load_progress_lb: cc.Label = null;

    @property({displayName: "小提示文字", tooltip: "小提示文字", type: cc.Label})
    hint_lb: cc.Label = null;

    @property({displayName: "小提示", tooltip: "小提示，代码会随机在里面抽取一个显示到文字上", type: cc.String})
    hint: string[] = [];

    @property({displayName: "显示进度的填充精灵", tooltip: "显示进度的填充精灵", type: cc.Sprite})
    load_progress_sr: cc.Sprite = null;


    // 是否开始加载
    is_start_load: boolean = false;


    // 碰撞回调
    // 当碰撞产生的时候调用      other 产生碰撞的另一个碰撞组件   self  产生碰撞的自身的碰撞组件
    onCollisionEnter (other, self) {
        // cc.director.loadScene(this.scene_name);
        // 开始加载
        this.onbtn_start_game();
    }

    onLoad () {
        // 随机数，并且取整，目的是随机显示小提示
        let num = Math.floor(this.randomNumber(0, this.hint.length - 1));
        // 显示小提示
        this.hint_lb.string = "小提示：" + this.hint[num];
    }


    // 开始加载
    onbtn_start_game () {
        // cc.director.loadScene("Village");
        this.load_parent.active = true;
        // this.load_game();
        this.is_start_load = true;
    }

    update (dt: number) {
        // 如果开始加载
        if (this.is_start_load == true) {
            // 开始填充进度条并更新文字显示  文字显示保留两位小数
            // cc.log("开始加载");
            this.load_progress_sr.fillRange += dt / this.load_time;
            this.load_progress_lb.string = ((this.load_progress_sr.fillRange) * 100).toFixed(2) + "%";
            // 如果加载完成
            if (this.load_progress_sr.fillRange >= 1) {
                // 0.8秒后跳转场景
                this.scheduleOnce(function () {
                    cc.director.loadScene(this.scene_name);
                    cc.log("加载完成跳转场景");   
                }, 0.8); 
            }
        }
    }

    // 封装好的随机数函数，min为最小值，max为最大值
    randomNumber(min : number, max : number): number{
        return Math.round(Math.random() * (min - max) + max);
    }

}